package com.skeleton.utils;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.UUID;

/**
 * 工具类
 * 
 * @author Wangyu
 */
public class SystemTools {

	// 得到指定时间Date的INT值
	public static final int convertDTTMtoInt(Date givenDTTM) {
		return (int) (givenDTTM.getTime() / 1000);
	}

	// 得到当前时间Date的INT值
	public static final int convertCurrentDTTMtoInt() {
		return convertDTTMtoInt(new Date());
	}

	// 得到INT时间对应的时间Date
	public static final Date convertIntToDTTM(int dttmInt) {
		return new Date((long) dttmInt * 1000);
	}

	// 得到指定日期Date的INT值
	public static final int convertDTtoInt(Date givenDTTM) {
		givenDTTM.setHours(givenDTTM.getHours()+8);
		return (int) (givenDTTM.getTime() / 1000 / 60 / 60 / 24);
	}

	// 得到当前日期Date的INT值
	public static final int convertCurrentDTtoInt() {
		return convertDTtoInt(new Date());
	}

	// 得到INT日期对应的时间Date
	public static final Date convertIntToDT(int dttmInt) {
		return new Date((long) dttmInt * 1000 * 60 * 60 * 24);
	}

	// 格式化时间yyyy-MM-dd HH:mm:ss
	public static final String formatDTTM(Date dt) {
		DateFormat df = new SimpleDateFormat(BaseConstants.DATE_PATTERN_NORMAL);
		return df.format(dt);
	}

	// 格式化时间yyyy-MM-dd
	public static final String formatDT(Date dt) {
		DateFormat df = new SimpleDateFormat(BaseConstants.DATE_PATTERN_SHORT_DT);
		return df.format(dt);
	}

	// 格式化时间HH:mm:ss
	public static final String formatTM(Date dt) {
		DateFormat df = new SimpleDateFormat(BaseConstants.DATE_PATTERN_SHORT_TM);
		return df.format(dt);
	}

	// 把yyyy-MM-dd HH:mm:ss类型的String格式化为Date
	public static final Date formatStringToDateDTTM(String dtStr) {
		DateFormat df = new SimpleDateFormat(BaseConstants.DATE_PATTERN_NORMAL);
		try {
			return df.parse(dtStr);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return null;
	}

	// 把yyyyMMdd类型的String格式化为Date
	public static final Date formatStringToDateDT(String dtStr) {
		DateFormat df = new SimpleDateFormat(BaseConstants.DATE_PATTERN_SHORT_DT);
		try {
			return df.parse(dtStr);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	// 得到当前月的第一天的Int值
	public static final int getCurrentFirstDTInt() {
		Calendar calendar = Calendar.getInstance();
		int year = calendar.get(Calendar .YEAR);
		int month = calendar.get(Calendar .MONTH)+1;
		return getMonthFirstDTInt(year, month);
	}
	
	// 得到当前月的最后一天的Int值
	public static final int getCurrentLastDTInt() {
		Calendar calendar = Calendar.getInstance();
		int year = calendar.get(Calendar .YEAR);
		int month = calendar.get(Calendar .MONTH)+1;
		return getMonthLastDTInt(year, month);
	}
	
	// 得到当前月的第一天的Int值
	public static final int getMonthFirstDTInt(int year, int month) {
		return convertDTtoInt(formatStringToDateDT(year+"-"+month+"-01"));
	}
	
	// 得到当前月的最后一天的Int值
	public static final int getMonthLastDTInt(int year, int month) {
		return convertDTtoInt(formatStringToDateDT(year+"-"+(month+1)+"-01"))-1;
	}

	//转化数字型字符串
	public static final int string2Int(String str, int defaultVal) {
		try {
			return Integer.parseInt(str);
		} catch (Exception ex) {
		}
		return defaultVal;
	}

	//转化数字型字符串
	public static final double string2Double(String str, double defaultVal) {
		try {
			return Double.parseDouble(str);
		} catch (Exception ex) {
		}
		return defaultVal;
	}
	
	/**
	 *  得到UUID
	 * @return String
	 * 				返回32位的UUID，去除了中间的连字号
	 * @author Zhongjiang
	 */
	public static final String getUUIDString() {
		return UUID.randomUUID().toString().replaceAll("-", "");
	}

	/**
	 *  拆分字符串
	 * @param str
	 * 				被拆分的字符串
	 * @param c
	 * 				分隔符
	 * @param max
	 * 				最多拆分数
	 * @return String[]
	 * 				返回拆分好的字符串，如果不符合要去，返回null
	 * @author Wangyu
	 */
	public static final String[] splitStr(String str, String c, int max) {
		if (SystemValidate.isEmpty(str)) {
			return null;
		}
		String[] strArr = str.split(c);
		for (int i = 0; i < strArr.length; i++) {
			if (SystemValidate.isEmpty(strArr[i])) {
				return null;
			}
		}
		if (strArr.length > max) {
			return null;
		}
		return strArr;
	}

	/**
	 *  拆分字符串
	 * @param str
	 * 				被拆分的字符串
	 * @param c
	 * 				分隔符
	 * @author Wangyu 
	 */
	public static final String[] splitStr(String str, String c) {
		return splitStr(str, c, 999999);
	}
	
	public static final String convertSpecialMark(String str) {
		str = str.replaceAll("<", "&lt");
		str = str.replaceAll(">", "&gt");
		str = str.replaceAll(" ", "&nbsp;");
		return str;
	}
	
}
